package service

import (
	"fmt"
	"github.com/kevin186/casbin/lib"
	"github.com/kevin186/casbin/models"
)

//func InitData() {
//	fmt.Println("写入deployment 获取数据")
//	CreateRouters("deployment", "/deployment", "GET")
//	fmt.Println("写入deployment 新增数据")
//	CreateRouters("deployment", "/deployment", "POST")
//	fmt.Println("写入deployment 详情数据")
//	CreateRouters("deployment", "/deployment/:id", "GET")
//	fmt.Println("写入service 获取数据")
//	CreateRouters("service", "/service", "GET")
//	fmt.Println("写入service 新增数据")
//	CreateRouters("service", "/service", "POST")
//	fmt.Println("写入service 详情数据")
//	CreateRouters("service", "/service/:id", "GET")
//	fmt.Println("写入configmap 获取数据")
//	CreateRouters("configmap", "/configmap", "GET")
//	fmt.Println("写入configmap 新增数据")
//	CreateRouters("configmap", "/configmap", "POST")
//	fmt.Println("写入configmap 详情数据")
//	CreateRouters("configmap", "/configmap/:id", "GET")
//
//	fmt.Println("创建role角色1")
//	err := CreateRole(1, 0, "admin", "管理员", "deployment")
//	fmt.Println("完成role角色1创建")
//	if err != nil {
//		fmt.Println(123)
//		log.Panic(err)
//	}
//	fmt.Println("创建role角色2")
//	err = CreateRole(1, 0, "admin", "管理员", "deployment")
//	if err != nil {
//		fmt.Println(456)
//		log.Panic(err)
//	}
//	fmt.Println("创建role角色3")
//	err = CreateRole(1, 0, "admin", "管理员", "deployment")
//	if err != nil {
//		fmt.Println(789)
//		log.Println(err)
//	}
//	fmt.Println("创建role角色4")
//	err = CreateRole(2, 1, "guest", "游客", "deployment")
//	if err != nil {
//		fmt.Println("abc")
//		log.Println(err)
//	}
//	fmt.Println("创建role角色5")
//	err = CreateRole(3, 2, "anonymous", "匿名用户", "deployment")
//	if err != nil {
//		fmt.Println("def")
//		log.Println(err)
//	}
//
//}

func CreateRole(code, pid int, roleName, roleComment, routerName, routerMethod string) error {
	// 查询符合条件的所有记录
	var routers []*models.Router
	fmt.Println("开始查询数据库routers")
	err := lib.DB.Find(&routers, "r_name = ? and r_method=?", routerName, routerMethod).Error
	if err != nil {
		fmt.Println("find r_name error:" + err.Error())
		return err
	}

	role, err := models.NewRole(code, pid, roleName, roleComment, routers)
	if err != nil {
		fmt.Println("newRole 失败")
		return err
	}
	err = lib.DB.Create(role).Error
	if err != nil {
		fmt.Println("创建 role 失败")
		return err
	}
	return nil
}

func CreateRouters(routerName, routerUri, routerMethod string) error {
	routers := &models.Router{
		RouterName:   routerName,
		RouterUri:    routerUri,
		RouterMethod: routerMethod,
	}
	err := lib.DB.Create(routers).Error
	if err != nil {
		fmt.Println("create routers error: ", err)
		return err
	}
	return nil
}

func CreateUsers(userName, roleName string) error {
	var roleCode RoleCode
	user1 := &models.User{}
	user1.UserName = userName
	user1.RoleName = roleName

	switch roleName {
	case "admin":
		roleCode = RoleCodeAdmin
	case "guest":
		roleCode = RoleCodeGuest
	case "anonymous":
		roleCode = RoleCodeAnonymous
	case "general":
		roleCode = RoleCodeGeneral
	}
	Roles := []*models.Role{}
	user1.Roles = Roles

	//err := lib.DB.Find(&user1.Roles, "role_name = ?", roleName).Error
	err := lib.DB.First(&user1.Roles, "code = ?", roleCode).Error
	fmt.Println("创建用户时查询到关联的roles为：", user1.Roles)
	if err != nil {
		fmt.Println("find users error: ", err)
		return err
	}

	err = lib.DB.Create(user1).Error
	if err != nil {
		fmt.Println("create users error: ", err)
		return err
	}
	lib.InitPolicy()
	return nil
}

//func CreateData() {
//	user1 := &models.User{
//		UserName: "likuo",
//		RoleName: "admin",
//		// TODO 创建role的RolePid与role的id起始值相同，后边的GetRoles递归函数会死循环
//		Roles: []*models.Role{
//			{
//				RoleName:    "admin",
//				RolePid:     1, // TODO 此处如果为0，就不会死循环
//				RoleComment: "管理员",
//				Routers: []*models.Router{
//					{
//						Id:           1,
//						RouterName:   "部门列表",
//						RouterUri:    "/depts",
//						RouterMethod: "GET",
//					},
//					{
//						Id:           2,
//						RouterName:   "部门详情",
//						RouterUri:    "/depts/:id",
//						RouterMethod: "GET",
//					},
//					{
//						Id:           3,
//						RouterName:   "新增部门",
//						RouterUri:    "/depts",
//						RouterMethod: "POST",
//					},
//					{
//						Id:           4,
//						RouterName:   "会员列表",
//						RouterUri:    "/users",
//						RouterMethod: "GET",
//					},
//					{
//						Id:           5,
//						RouterName:   "会员详情",
//						RouterUri:    "/users/:id",
//						RouterMethod: "GET",
//					},
//					{
//						Id:           6,
//						RouterName:   "新增会员",
//						RouterUri:    "/users",
//						RouterMethod: "POST",
//					},
//				},
//			},
//			{
//				RoleName:    "guest",
//				RolePid:     2,
//				RoleComment: "游客",
//				Routers: []*models.Router{
//					{
//						Id:           1,
//						RouterName:   "部门列表",
//						RouterUri:    "/depts",
//						RouterMethod: "GET",
//					},
//					{
//						Id:           4,
//						RouterName:   "会员列表",
//						RouterUri:    "/users",
//						RouterMethod: "GET",
//					},
//				},
//			},
//			{
//				RoleName:    "dev",
//				RolePid:     3,
//				RoleComment: "开发",
//				Routers: []*models.Router{
//					{
//						Id:           1,
//						RouterName:   "部门列表",
//						RouterUri:    "/depts",
//						RouterMethod: "GET",
//					},
//					{
//						Id:           4,
//						RouterName:   "会员列表",
//						RouterUri:    "/users",
//						RouterMethod: "GET",
//					},
//				},
//			},
//		},
//	}
//
//	user2 := &models.User{
//		UserName: "kevin",
//		RoleName: "manager",
//		Roles: []*models.Role{
//			{
//				RoleName:    "dev",
//				RolePid:     4,
//				RoleComment: "开发",
//			},
//			{
//				RoleName:    "ops",
//				RolePid:     5,
//				RoleComment: "运维",
//			},
//		},
//	}
//
//	lib.DB.Create(user1)
//	lib.DB.Create(user2)
//}
